﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Inventario_HardSoft.Controlador;
using Inventario_HardSoft.ADO;

namespace Inventario_HardSoft.Presentacion
{
    public partial class UC_RegProb_Hw : UserControl
    {
        private Ctrl_Reg_Usu control_RegUsu;
        private Ctrl_Reg_Sol control_RegSolucion;
        private Ctrl_Softwares control_Hardware;
        private Ctrl_Nombre_Equipo get_Equipo;
        private string nombreUsuario;
        private string nombreEq;
    
        public UC_RegProb_Hw()
        {
            InitializeComponent();
            control_RegUsu = new Ctrl_Reg_Usu();
            control_RegSolucion = new Ctrl_Reg_Sol();
            control_Hardware = new Ctrl_Softwares();
            get_Equipo = new Ctrl_Nombre_Equipo();
        }

        public UC_RegProb_Hw(string usuario) : this()
        {
            nombreUsuario = usuario;
        }

        public UC_RegProb_Hw(string nombreUsuario, string nombreEq) : this()
        {
            // TODO: Complete member initialization
            this.nombreUsuario = nombreUsuario;
            this.nombreEq = nombreEq;
        }

        private void combo_usuario_DropDown(object sender, EventArgs e)
        {
            //limpiamos el combo
            cmb_usuario.Items.Clear();
            //vas a llenar el listbox, llamar a la base de datos
            List<USUARIO> usuarios = control_RegUsu.getList_Reg_Usu();
            foreach (USUARIO r in usuarios) //recorre cada elemento de label1 lista
            {
                cmb_usuario.Items.Add(r.NOMBRE.ToString());
            }
        }

        private void combo_asistentereparador_DropDown(object sender, EventArgs e)
        {
            //limpiamos el combo
            cmb_reparador.Items.Clear();
            //vas a llenar el listbox, llamar a la base de datos
            List<USUARIO> reparadores = control_RegSolucion.getList_AsistentesNames();
            foreach (USUARIO r in reparadores) //recorre cada elemento de label1 lista
            {
                cmb_reparador.Items.Add(r.NOMBRE.ToString());
            }
        }

        private void combo_usuario_SelectionChangeCommitted(object sender, EventArgs e)
        {
            //limpiamos la grilla
            grid_equipos.DataSource = null;
            //llenamos la grilla
            string nomb_usu = cmb_usuario.Text;
            grid_equipos.Rows.Clear();
            control_RegUsu.get_MuestroEquipos_Cliente(grid_equipos, nomb_usu);    
        }

        internal DialogResult registrarProblemaHw()
        {
            DialogResult result = DialogResult.Cancel;            
            //verificamos que ha seleccionado el usuario
            if (cmb_usuario.SelectedIndex >= 0)
            {
                //verificamos que se haya seleccionado una fila
                if (grid_equipos.SelectedRows.Count > 0)
                {
                    //verificamos que haya seleccionado el combo de asistente
                    if (cmb_reparador.SelectedIndex >= 0)
                    {
                        //verificamos que haya seleccionado la prioridad
                        if (cmb_prioridad.SelectedIndex >= 0)
                        {
                            //verificamos la fecha, que esta sea >= que la fecha actual
                            if (Convert.ToDateTime(time_fechaEntrega.Text).CompareTo(DateTime.Today) >= 0)
                            {
                                if (!string.IsNullOrWhiteSpace(txt_problema.Text))
                                {
                                    DialogResult dr = control_Hardware.tieneProblema_Equipo(grid_equipos.SelectedRows[0].Cells["idEquipo"].Value.ToString());

                                    if (dr == DialogResult.Cancel)  //no tiene registrado problemas
                                    {
                                        PROBLEMA p = new PROBLEMA()
                                        {
                                            IDEQUIPO = grid_equipos.SelectedRows[0].Cells["idEquipo"].Value.ToString(),
                                            IDPROGRAMA = null,
                                            REGISTRADOPOR = txt_usuariologin.Text,
                                            REPARADORNAME = cmb_reparador.SelectedItem.ToString(),
                                            PRIORIDAD = control_Hardware.getNumPrioridad(cmb_prioridad.SelectedItem.ToString()),
                                            FECHAENTREGA = Convert.ToDateTime(time_fechaEntrega.Text),
                                            FECHAREGISTROENTRADA = DateTime.Now,
                                            FECHAREGISTROSALIDA = null,
                                            TIEMPOREPARACION = string.Empty,
                                            DESCRIPCION = txt_problema.Text,
                                            OBSERVACIONES = txt_observaciones.Text,
                                            ESTADO = "pendiente",
                                            SOLUCION = string.Empty,
                                            ELIMINADO = 0,
                                            // duplico al reparador name ...
                                            REPARADORRESPONSABLE = cmb_reparador.SelectedItem.ToString(),                                           
                                        };
                                        result = control_Hardware.registrarProbHardware(p);
                                    }
                                    else if(dr == DialogResult.OK)
                                    {
                                        MessageBox.Show("El equipo seleccionado tiene registrado otro problema. No se puede registrar otro problema adicional", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("No ha registrado la descripción del problema", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show("No puede registrar un problema con una fecha de entrega anterior a la fecha actual", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show("No ha seleccionado la prioridad del problema", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("No ha seleccionado el asistente/reparador.", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Seleccione un equipo para registrar un problema.", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("No ha seleccionado el usuario.", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
            return result;
        }

        private void UC_RegProb_Hw_Load(object sender, EventArgs e)
        {
          txt_usuariologin.Text = nombreUsuario;
          if (!String.IsNullOrWhiteSpace(nombreEq))
          {
              String nombUsu = get_Equipo.Lista_Equipo(nombreEq);
              this.combo_usuario_DropDown(sender, e);
              cmb_usuario.SelectedIndex = cmb_usuario.FindStringExact(nombUsu);
              this.combo_usuario_SelectionChangeCommitted(sender, e);
              grid_equipos.ClearSelection();
          }
          else
          { 
              grid_equipos.Rows.Clear();
          } 
        } 
    }
}
